package jp.androidgroup.chiba.androidresearch.oauth;

import jp.androidgroup.chiba.androidresearch.Common;
import jp.androidgroup.chiba.androidresearch.Constants;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;

/**
 * <pre>
 * 非同期通信によってGoogleのOAuth認証を要求するため、ブラウザを表示して
 * ユーザに許可を要求します。
 * </pre>
 */
public class OAuthRequestTokenTask extends AsyncTask<Void, Void, Void> {

	private Context _context;
	private OAuthProvider _provider;
	private OAuthConsumer _consumer;

	/**
	 *
	 * コンストラクタ
	 *
	 * @param context
	 *            Context
	 * @param consumer
	 *            OAuthConsumer
	 * @param provider
	 *            OAuthProvider

	 */
	public OAuthRequestTokenTask(Context context, OAuthConsumer consumer,
			OAuthProvider provider) {
		_context = context;
		_consumer = consumer;
		_provider = provider;
	}

	/**
	 * OAuthはリクエストトークンを取得し、トークンを認証するためにユーザにブラウザを提示します。
	 */
	@Override
	protected Void doInBackground(Void... params) {

		try {
			final String url = _provider.retrieveRequestToken(_consumer,
					Constants.OAUTH_CALLBACK_URL);
			Log.i(Common.LOT_TAG, "retrieve request token url : " + url);
			Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url))
					.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
							| Intent.FLAG_ACTIVITY_NO_HISTORY
							| Intent.FLAG_FROM_BACKGROUND);
			_context.startActivity(intent);

		} catch (Exception e) {
			Log.e(Common.LOT_TAG, "Error during OAUth retrieve request token", e);
		}

		return null;
	}

}